import router from './router';
import constantRoutes from './router/routers';
import { useUserStore } from '@/store/modules/user.js'; //路由
import NProgress from 'nprogress'; // 进度条
import 'nprogress/nprogress.css';
import { getToken } from '@/utils/auth'; //  从 cookie 获取 token
import getPageTitle from '@/utils/get-page-title'; //设置tiile

//引入common文件
import common from '@/utils/common.js';
//登录页面路径
const loginPath = '/login';

NProgress.configure({
	showSpinner: false,
}); // NProgress 配置

const whiteList = ['/login', '/404']; // 没有重定向白名单

router.beforeEach(async (to, from, next) => {
	const userStore = useUserStore(); //pinia这里才会加在完成,不要用store,可能会成为全局关键字
	// 开始加载进度条
	NProgress.start();
	// 设置页面标题
	document.title = getPageTitle(to.meta.title);

	//判断API地址是否有切换--测试时会有切换地址的情况，正式环境不存在该情况
	const api = baseConfig.baseUrl; //API地址
	let ApiStorage = localStorage.getItem('api');
	if (!ApiStorage) {
		localStorage.setItem('api', api); //缓存API地址
	} else if (ApiStorage && ApiStorage != api) {
		// 有缓存API,并且缓存API地址和现使用API不一致时，清除缓存
		localStorage.setItem('api', api); //缓存API地址
		// userStore.logout();
	}

	// 判断用户是否已经登录
	const hasToken = getToken();
	if (hasToken) {
		//有token
		if (to.path === loginPath) {
			// 已登录,跳转到主页
			next({ path: '/' });
			document.getElementById('loader-main').style.display = 'none';
		} else {
			//是否有用户信息
			// const hasGetUserInfo = userStore.userInfo;
			const hasGetUserInfo = {nuserName: '李大锤'};
			if (hasGetUserInfo) {
				next()
			} else {
				// 如果获取用户数据失败-删除token并跳转到登录页重新登录
				// await userStore.logout();
				// layer.msg('获取用户数据失败,请重新登录', { icon: 2, time: 2000 });
				next({ path: loginPath, query: { redirect: to.path } });
			}
		}

		const isExpireTime = common.isExpireTime();
		// 半小时内将过期,更新token
		if (isExpireTime) {
			common.loginOut() //退出登录
		}
	} else {
		/* 没有 token*/
		if (whiteList.indexOf(to.path) !== -1) {
			// 自由登录白名单
			next();
		} else {
			// 没有权限访问其他页面被重定向到登录页面
			next({ path: loginPath, query: { redirect: to.path } });
		}
	}
});

// 全局后置守卫
router.afterEach(() => {
	// 结束进度条
	NProgress.done();
	document.getElementById('loader-main').style.display = 'none'; //loading
});